#include <iostream>

// 函数模板
template<typename T>
T max(T a, T b) {
    return (a > b) ? a : b;
}

// 类模板
template<typename T>
class Box {
private:
    T item;

public:
    Box(T i) : item(i) {}

    T getItem() const {
        return item;
    }

    void setItem(T i) {
        item = i;
    }
};

int main() {
    // 使用 int 类型的函数模板
    int num1 = 5, num2 = 10;
    std::cout << "Max of " << num1 << " and " << num2 << " is " << max(num1, num2) << std::endl;

    // 使用 double 类型的函数模板
    double d1 = 3.5, d2 = 2.7;
    std::cout << "Max of " << d1 << " and " << d2 << " is " << max(d1, d2) << std::endl;

    // 使用 int 类型的类模板
    Box<int> intBox(100);
    std::cout << "The integer box contains: " << intBox.getItem() << std::endl;

    // 使用 string 类型的类模板
    Box<std::string> stringBox("Hello, World!");
    std::cout << "The string box contains: " << stringBox.getItem() << std::endl;

    return 0;
}